<?php
/**
 * set可以做集合，比如好友列表，张三的firend 有 李四和王五 李四的好友有 李雷和韩梅梅
 * sinter 可以获取两个人的共同好友
 * 可以做随机读取 srandmember
 */

namespace app\redis\controller;


use think\Controller;

class Set extends Controller
{
    private $redis;
    public function __construct()
    {
        $this->redis =  new \Redis();
        $this->redis->connect('127.0.0.1',6379);
    }

    /**
     * 向一个键值中添加多个元素
     * key不存在则创建
     * sadd添加成功返回1，添加相同的值返回0
     * 以下举例：比如好友列表
     */
    public function sadd()
    {
        $this->redis->sAdd('firend','张三','李四','王五'); //可以一次性添加
        $this->redis->sAdd('firend','赵六'); //也可以一个一个添加
        $this->redis->sAdd('firend','韩七');
    }

    public function smembers()
    {
        $res = $this->redis->sMembers('firend_35');
        dump($res);
    }

    /**
     * 删除结合中的值
     */
    public function srem()
    {
        $this->redis->sRem('firend','李四');
    }

    /**
     * 判断元素是否是key的成员,是返回true（1）否 无返回值
     */
    public function sismember()
    {
        $res = $this->redis->sIsMember('firend','王五');
        echo $res;
    }

    /**
     * 返回元素数量
     */
    public function scard()
    {
        echo $this->redis->sCard('firend');
    }

    /**
     * 随机移除一个元素并返回这个被移除的元素
     */
    public function spop()
    {
        echo $this->redis->sPop('firend');
    }

    public function testSinter()
    {
        $this->redis->sAdd('firend_24','张三','李四','王五','赵六','韩七');
        $this->redis->sAdd('firend_35','李四','小草','王五','耿师傅','红');
    }

    /**
     * 获取两组集合的交集
     */
    public function sinter()
    {
        $res =  $this->redis->sInter('firend_24','firend_35');
        dump($res);
    }

    public function smove()
    {
        $this->redis->sMove('firend_24','firend_35','王五');
    }

    /**
     * 随机读取
     * 1.如果不写count参数，则值随机1个
     * 2.如果随机数是正整数，并且小于总个数，则随机返回，并且读取的值不会重复
     * 3.如果总个数，则全部返回
     * 4.如果是负数，依然会取正整数返回，但可能会有重复的。
     */
    public function srandmember()
    {
        $res = $this->redis->sRandMember('firend_35','2');
        dump($res);
    }
}